/*
 * sistema-usuarios.h
 *
 *  Created on: 03/10/2011
 *      Author: guido
 */

#ifndef SISTEMA_USUARIOS_H_
#define SISTEMA_USUARIOS_H_

#include "constantes.h"
#include <iostream>
#include <fstream>
#include <map>

class ArchivoVacioException : public std::exception {};

class SistemaUsuarios {
public:
	SistemaUsuarios(char* ruta) {
		this->usuarios.clear();
		this->ruta = ruta;
		std::ifstream arch(ruta, std::ios::in);
		if (!arch.good()) {
			throw ArchivoVacioException();
		}
		else {
			std::string temp;
			std::getline(arch, temp);
			while (arch.good()) {
				int posSeparador = temp.find(SEPARADOR);
				std::string nombre = temp.substr(0, posSeparador);
				temp.erase(0, posSeparador + 1);
				//temp ahora solo tiene la clave
				crearUsuario(nombre, temp);
				std::getline(arch, temp);
			}
		}
	}
	~SistemaUsuarios() {
		std::ofstream arch(ruta, std::ios::trunc | std::ios::out);
		std::map<std::string, std::string>::iterator it;
		for (it=usuarios.begin(); it != usuarios.end(); ++it) {
			std::string nombre = (*it).first;
			std::string clave = (*it).second;
			arch << nombre << SEPARADOR << clave << std::endl;
		}
		arch.close();
	}

	bool cambiarClave(std::string nombre, std::string vieja, std::string nueva);
	bool usuarioExiste(std::string nombre, std::string clave);

private:
	bool crearUsuario(std::string nombre, std::string clave);
	std::map<std::string, std::string> usuarios;
	char* ruta;
};

#endif /* SISTEMA_USUARIOS_H_ */
